Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

87장. CloudTrail — 변경 추적

이 장에서 말하고자 하는 것

지금까지 본 관측성 도구는 사용자 트래픽 의 이야기를 다뤘다.

  • 메트릭 — 시스템 숫자
  • 로그 — 애플리케이션 이야기
  • 트레이스 — 요청 흐름

또 하나가 남아 있다.

“AWS 환경 안에서 누가 무엇을 했는가”

이걸 기록하는 도구가

AWS CloudTrail

이다.


1. CloudTrail이 기록하는 것

AWS API 호출을 모두 기록한다.

이벤트 예:
  - 누가     : User / Role / Service
  - 언제     : 2026-01-01T10:23:45Z
  - 어디서   : 13.124.55.21 (소스 IP)
  - 무엇을   : RunInstances · CreateBucket · UpdateService …
  - 어떤 자원에 : i-..., bucket=...
  - 결과     : 성공 / 실패 / Access Denied
  • 콘솔 클릭도 결국 API 호출이므로 모두 기록된다
  • IAM Role을 받은 워크로드의 호출도 기록된다

2. 두 종류의 이벤트

Management Events

인프라/계정 변경.

  • EC2 시작/정지
  • IAM Role 만들기
  • S3 버킷 생성
  • VPC 변경

기본으로 켜져 있다 (90일까지 콘솔 검색 가능).

Data Events

자원 안의 데이터 작업.

  • S3 객체 PUT / GET
  • Lambda Invoke
  • DynamoDB GetItem · PutItem

기본으로는 안 켜진다 (양이 많고 비용 큼).
필요한 경우만 켠다.


3. Trail — 영구 보관과 분석

CloudTrail의 기본 보관은 90일이다.

장기 보관 / 분석을 위해 Trail 을 만든다.

Trail "all-management"
  ├─ S3 버킷에 자동 적재
  ├─ CloudWatch Logs로도 흘려보냄 (선택)
  └─ Multi-region 켜기
  • S3에는 영구 보관 (수년)
  • Athena 로 SQL 질의 가능
  • 보안 분석 도구 (GuardDuty 등) 의 입력

4. 왜 필요한가

1. 사고 추적

“어제 운영 RDS가 왜 삭제됐지?”
→ CloudTrail로 누가 언제 DeleteDBInstance 호출했는지 추적.

2. 감사 / 컴플라이언스

ISO · SOC2 · PCI 같은 표준은 변경 이력 보관을 요구한다.

3. 보안 사고 대응

계정이 탈취되었다면 어떤 권한이 어떤 행위를 했는지 봐야 한다.

4. 권한 사용 분석

“이 Role이 실제로 어떤 Action 만 호출했나” 를 보고 정책을 좁힌다 (80장).


5. CloudTrail Lake — SQL로 질의

CloudTrail 이벤트를 직접 SQL로 검색하는 관리형 데이터 스토어.

SELECT eventTime, userIdentity.arn, eventName, requestParameters
FROM <event-data-store>
WHERE eventName = 'DeleteDBInstance'
  AND eventTime > '2026-01-01'

S3에 적재된 로그를 Athena로 질의하는 것보다 즉시성이 좋다.


6. 보안 관련 통합

CloudTrail은 단독으로는 큰 가치가 없을 수 있다.
다음 서비스와 함께 가치를 발휘한다.

  • GuardDuty — 비정상 패턴 자동 탐지 (사용자 비활성, 외부 국가에서 호출 등)
  • Security Hub — 여러 보안 신호 통합
  • AWS Config — 자원의 상태 변경 추적 (compliance 평가)

“CloudTrail은 일기, GuardDuty는 일기를 보고 사고를 찾는 형사”


7. 우리 서비스에서

[CloudTrail]
  ├─ Trail "prod-all"
  │   ├─ Management Events: ON
  │   ├─ Multi-region: ON
  │   ├─ Log file validation: ON
  │   └─ S3 bucket: msa-prod-cloudtrail (Object Lock + KMS)
  ├─ Data Events on critical buckets only
  └─ CloudWatch Logs → 일정 패턴에 알람

[GuardDuty]: 켬
[Security Hub]: 켬
[AWS Config]: 핵심 자원 추적 ON

운영 사고가 났을 때 “누가 무엇을 했나” 를 시간 단위로 추적 가능.


8. 직접 확인해보기 — CLI

최근 이벤트 조회 (콘솔에서 보던 그것)

aws cloudtrail lookup-events \
  --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteDBInstance \
  --max-results 10

Trail 만들기

aws cloudtrail create-trail \
  --name prod-all \
  --s3-bucket-name msa-prod-cloudtrail \
  --is-multi-region-trail \
  --enable-log-file-validation \
  --kms-key-id alias/cloudtrail

aws cloudtrail start-logging --name prod-all

Trail 상태

aws cloudtrail get-trail-status --name prod-all

9. 코드로는 이렇게 생겼다 — Terraform

resource "aws_s3_bucket" "cloudtrail" {
  bucket = "msa-prod-cloudtrail"
}

resource "aws_s3_bucket_versioning" "cloudtrail" {
  bucket = aws_s3_bucket.cloudtrail.id
  versioning_configuration { status = "Enabled" }
}

resource "aws_s3_bucket_object_lock_configuration" "cloudtrail" {
  bucket = aws_s3_bucket.cloudtrail.id
  rule {
    default_retention {
      mode = "GOVERNANCE"
      days = 365
    }
  }
}

resource "aws_cloudtrail" "main" {
  name                          = "prod-all"
  s3_bucket_name                = aws_s3_bucket.cloudtrail.id
  is_multi_region_trail         = true
  enable_log_file_validation    = true
  include_global_service_events = true
  kms_key_id                    = aws_kms_key.cloudtrail.arn

  event_selector {
    read_write_type           = "All"
    include_management_events = true

    # 핵심 버킷의 Data Events만 켬
    data_resource {
      type   = "AWS::S3::Object"
      values = ["${aws_s3_bucket.uploads.arn}/"]
    }
  }
}

Object Lock + 별도 계정으로 복제 → 악의적 삭제로부터 보호.


10. 이렇게 쓰면 망한다 — 안티패턴

안티패턴 1. CloudTrail을 안 켠다

사고가 나도 누가 했는지 모른다.

모든 운영 계정에 켠다 (Organizations 전체에 켜는 게 표준)

안티패턴 2. Trail S3 버킷이 누구나 만질 수 있다

악의적 사용자가 흔적을 지울 수 있다.

Object Lock + 별도 보안 계정 복제

안티패턴 3. Data Events 를 무차별 켠다

S3 GET 마다 이벤트가 발생 → 비용 폭증.

핵심 자원에만

안티패턴 4. 로그만 모으고 알람이 없다

누가 IAM Role을 만들거나 보안 그룹을 풀어도 모른다.

핵심 이벤트는 CloudWatch Alarm 또는 EventBridge Rule로 알람


11. 한 줄로 정리

CloudTrail은 AWS 안의 모든 행위를 기록하는 일기이며,
Multi-region · Object Lock · 알람 세 가지가 운영의 출발선이다


12. 이 장의 핵심 정리

  1. CloudTrail은 AWS API 호출의 누가·언제·무엇·어디를 기록한다.
  2. Management Events는 기본 ON, Data Events는 필요한 자원만.
  3. Trail로 S3에 영구 보관 + KMS · Object Lock으로 보호한다.
  4. GuardDuty · Security Hub · Config 와 함께 가치가 커진다.
  5. 핵심 이벤트 (IAM 변경 · SG 변경 · 삭제 작업) 는 알람으로 연결한다.
  6. CloudTrail이 없으면 사고 대응이 불가능에 가깝다.